package com.lsf.dao;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.lsf.po.PubMessage;
import com.lsf.po.User;

/**

 * 创建日期：2013-3-9下午10:19:30

 * 修改日期：

 * 作者：刘帅飞

 */

public class PubMessageDAOImpl extends HibernateDaoSupport implements PubMessageDAO{
	
	public void savePubMessage(PubMessage pubMessage) {			
			this.getHibernateTemplate().save(pubMessage);
	}

/*查询所有未读记录，取出后将记录标记为已读*/
	public List<PubMessage> queryAllPubMessage(int readTag) {
		/*根据readTag的值取出记录对象*/
		List<PubMessage> list = this.getHibernateTemplate().find("from PubMessage where readTag = ?",readTag);
		/*利用for循环逐项修改记录对象item的readTag属性*/
		if(list.size()!=0){
			for(PubMessage item : list){
				
				/*下一步，准备修改：判断如果 item.getDate()+5s > 现在时间，就进行由0变1的工作*/				
				//Timestamp	now = new Timestamp(System.currentTimeMillis());
				/*Calendar calen = Calendar.getInstance(); 获取Calendar实例	
				calen.getTime();	calen获取当前时间
				calen.add(Calendar.SECOND, -5);		当前时间减去5秒		
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
				String time = df.format(calen);	把calen转化为String类型的time
				Timestamp nowMinusFiveSecond = Timestamp.valueOf(time);	把string类型的time转化为Timestamp类型
				 														获得比当前时间早5秒的nowMinusFiveSecond
				*/
				Timestamp currentTime = new Timestamp(System.currentTimeMillis());
				long currentLongTime = System.currentTimeMillis();
				long fiveSecond = 5*1000;		
				Timestamp fiveSecondBeforeCurrentTime = new Timestamp(currentLongTime-fiveSecond);
				
				System.out.println("currentTime"+currentTime);
				System.out.println("fiveSecondBeforeCurrentTime"+fiveSecondBeforeCurrentTime);
				System.out.println("item.getDate()"+item.getDate());
				System.out.println("fiveSecondBeforeCurrentTime.before(item.getDate())"+fiveSecondBeforeCurrentTime.before(item.getDate()));
				/*“fiveSecondBeforeCurrentTime”即比当前时间早五秒，是一个判定信息新或者旧的判定时间点，
				 * 在这个时间点之前的是旧信息，readTag标签要从0变为1.
				 * 在这个时间点之后的是新信息，readTag标签保持为0*/
				if(fiveSecondBeforeCurrentTime.after(item.getDate())){
					
					item.setReadTag(1);/*将readTag属性值由0改为1，即从未读变成已读*/
					this.getHibernateTemplate().update(item);/*利用for循环逐项修改记录对象item的readTag属性*/
					//System.out.println("AFTER item.getPubMessageId()="+item.getMessageId()+";item.getReadTag()="+item.getReadTag());
				}
			}
		}
		return list;
	}

		
}
